又来填坑了。
还是递归问题,这次是汉诺塔。
题意是这样的:有三根相邻的柱子,标号为A,B,C,A柱子上从下到上按金字塔状叠放着n个不同大小的圆盘,要把所有盘子一个一个移动到柱子C上,并且每次移动同一根柱子上都不能出现大盘子在小盘子上方,请问至少需要多少次移动,并输出移动的步骤。
由用户自定义输入金盘的个数n。
可以测试数据:当n=3时,自己模拟一下移动的步骤;
例如:
当A柱子上有3个从上往下按照从小到大依次排列盘子时,要把这3个金盘全部移动到C柱子上,且仍然是从上往下按照从小到大的放置顺序。步骤如下:
(记这3个盘子的编号为x,y,z,x在最上,y在中间,z在最下)
第一步:把 x 从A移动到C; 此时的情况(从上到下):A有yz,B有0,C有x
第二步:把 y 从A移动到B; 此时的情况(从上到下):A有z,B有y,C有x
第三步:把 x 从C移动到B; 此时的情况(从上到下):A有z,B有xy,C有0
第四步:把 z 从A移动到C; 此时的情况(从上到下):A有0,B有xy,C有z
第五步:把 x 从B移动到A; 此时的情况(从上到下):A有x,B有y,C有z
第六步:把 y 从B移动到C; 此时的情况(从上到下):A有x,B有0,C有yz
第七步:把 x 从A移动到C; 此时的情况(从上到下):A有0,B有0,C有xyz
移动完毕。
先讨论输出一共有多少步骤的这个问题。其实自己实验一下可以发现这是有规律的:
n 步数(记为t)
1 1
2 3
3 7
4 15
………….